/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pl.tewi.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import pl.tewi.types.ApplicationServerType;

/**
 * Adnotacja konfigurująca serwer aplikcayjny w trybie wbudowanym. Pliki domeny
 * zawarte w archiwum są kopiowane do terget/nazwa_domeny i plik domain.xml jest
 * modyfikowany aby ustawić np prawidłowo porty
 * @author Marcin Kwapisz
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ApplicationServer {

    /**
     * Nazwa domeny serwera aplikacyjnego uruchomionego w trybie wbudowanym
     * @return Nazwa domeny serwera aplikacyjnego która ma być utworzona
     */
    String instanceName() default "domain1";

    /**
     * 
     * @return 
     */
    String hostName() default "localhost";

    /**
     * Konfiguracja portów danej domeny serwera aplikacyjnego, domyślnie http:8080, https:8081, orb:3700, orbs:3820
     * @return 
     */
    Ports instancePorts() default @Ports();

    /**
     * Ścieżka w której znajdują się katalogi z konfiguracją domen. 
     * Domyślnie {@code target/glassfish}. Nazwa składana jest z nazwą domeny 
     * np: {@code target/glassfish/domain1}
     * @return ścieżka do konfiguracji serwera aplikacyjnego 
     */
    String instanceParentPath() default "target/glassfish";

    /**
     * Typ serwera aplikacyjnego. Domyślnym jest Glassfish
     * @return typ serwera aplikacyjnego
     */
    ApplicationServerType serverType() default ApplicationServerType.GLASSFISH;

    /**
     * Domyślna konfigracja systemu bezpieczeństwa polega na plikowym realmie bezpieczeństwa i jednym użytkowniku o nazwie anonymous
     * @return 
     */
    Security security() default @Security();

    /**
     * Ścieżka do pliku z zasobami do zainstalowania na serwerze aplikacyjnym
     * @return 
     */
    AppResource resources() default @AppResource();
}
